7d69bcd5fbcd10167517dec2e8071f763600629c,bundles/org.eclipse.osgi/felix/src/org/apache/felix/resolver/ResolverImpl.java,ResolverImpl,checkPackageSpaceConsistency,#ResolveSession#List#List#Resource#Candidates#boolean#Map#Map#,1299
Before Change
else if (!sourceBlame.m_cap.getResource().equals(blame.m_cap.getResource()))
{
// Try to permutate the conflicting requirement.
allCandidates.permutate(blame.m_reqs.get(0), importPermutations);
// Try to permutate the source requirement.
allCandidates.permutate(sourceBlame.m_reqs.get(0), importPermutations);
// Report conflict.
After Change
private ResolutionError checkPackageSpaceConsistency(
ResolveSession session,
Resource resource,
Candidates allCandidates,
boolean dynamic,
Map<Resource, Packages> resourcePkgMap,
Map<Resource, Object> resultCache)
{
if (!dynamic && session.getContext().getWirings().containsKey(resource))
{
return null;
}
Object cache = resultCache.get(resource);
if (cache != null)
{
return cache instanceof ResolutionError ? (ResolutionError) cache : null;
}
Packages pkgs = resourcePkgMap.get(resource);
ResolutionError rethrow = null;
Candidates permutation = null;
Set<Requirement> mutated = null;
// Check for conflicting imports from fragments.
// TODO: Is this only needed for imports or are generic and bundle requirements also needed?
// I think this is only a special case for fragment imports because they can overlap
// host imports, which is not allowed in normal metadata.
for (Entry<String, List<Blame>> entry : pkgs.m_importedPkgs.fast())
{
String pkgName = entry.getKey();
List<Blame> blames = entry.getValue();
if (blames.size() > 1)
{
Blame sourceBlame = null;
for (Blame blame : blames)
{
if (sourceBlame == null)
{
sourceBlame = blame;
}
else if (!sourceBlame.m_cap.getResource().equals(blame.m_cap.getResource()))
{
// Try to permutate the conflicting requirement.
session.addPermutation(PermutationType.IMPORT, allCandidates.permutate(blame.m_reqs.get(0)));
// Try to permutate the source requirement.
session.addPermutation(PermutationType.IMPORT, allCandidates.permutate(sourceBlame.m_reqs.get(0)));
// Report conflict.